Forum des exercices du projet Zuul

Exercice 7.18

  
 
Avatar anonfirstname2 anonlastname2
Exercice 7.18
par anonfirstname2 anonlastname2, jeudi 19 mars 2020, 08:38
 
  1. Lisez la suite du chapitre 7 [ci-joint] (si possible en anglais, sinon en français).

  2. Implement the suggested change. Make sure that your program still works as before.

  3. Vous devez comprendre que la création de getcommandList procède de la même idée que la création de getExitString à l'exercice 7.7 : produire l'information au plus près et l'utiliser ailleurs.

  4. Il y a 3 classes en jeu ici : l'une produit l'information, la 2ème la transmet simplement, et la dernière l'affiche.
    Attention !  Une méthode dont le nom commence par get ne doit rien afficher, et le nom d'une méthode qui retourne quelque chose sans l'afficher ne doit pas commencer par show.

Avatar Jean COULOM
Re: Exercice 7.18
par Jean COULOM, jeudi 3 octobre 2013, 22:49
 

Bonsoir, est-ce que déclarer la méthode getCommandList en static et l'utiliser directement sur la classe dans game avec System.out.println(CommandWords.getCommandList()); est bon ?

Avatar Denis BUREAU
Re: Exercice 7.18
par Denis BUREAU, vendredi 4 octobre 2013, 00:03
 

Ce pourrait effectivement être une solution, mais cela ne semble pas être l'esprit de ce qui nous est déjà fourni :
- la classe CommandWords semble devoir être instanciée puisqu'elle possède une méthode d'instance
- la classe Parser crée effectivement un objet CommandWords

Je vous suggère donc de faire de même, d'autant que cela permettrait de changer les commandes reconnues selon certains évènements du jeu.

Pour éviter d'avoir à créer un 2ème objet CommandWords, il est possible de créer aussi une fonction getCommandList dans le Parser (qui elle s'adresserait à son objet CommandWords).

Avatar Denis BUREAU
Re: Exercice 7.18
par Denis BUREAU, mercredi 18 mars 2015, 17:23
 

Un étudiant a écrit :

Après avoir passé l'exercice 7.16 sans encombre "showAll()" et "showCommands"

Je me retrouve avec un problème dans l'exercice 7.18 ou il faut retourner une string

Voici mon code :
 
Classe CommandWords

[code java retiré pour ne pas influencer les futurs lecteurs]
 
//////////////////////////////////////////////////////////////////////////////////////////////////////
Classe Parser

[code java retiré pour ne pas influencer les futurs lecteurs]
 
//////////////////////////////////////////////////////////////////////////////////////////////////////
Classe Game    
 
[code java retiré pour ne pas influencer les futurs lecteurs]
 
////////////////////////////////////////////////////////////////////////////////////////////////////
 

En compilant la classe GAME j'ai l'erreur "non-static method getCommands() cannot be referenced from a static context "

Je ne sais vraiment pas comment la resoudre j'ai essayer de mettre getCommands() en static mais rien n'y fait.

Pouvez vous me donner un coup de pouce ?

Cordialement

Avatar Denis BUREAU
Re: Exercice 7.18
par Denis BUREAU, dimanche 23 mars 2014, 20:21
 

Le problème vient de la ligne : Parser.getCommand();

Qu'est-ce que Parser ? Une classe.
Donc le compilateur vous dit que getCommand() doit être statique.

Mais si getCommand() avait dû être statique, on l'aurait écrite ainsi !
Pour appeler une méthode non statique, il faut un objet, pas une classe. N'avez-vous pas un objet de la classe Parser "sous la main" ?

Quand vous aurez résolu ce problème de compilation, vous constaterez que la liste des commandes ne s'affiche pas. Mais où avez-vous écrit une instruction d'affichage de la liste des commandes ? Nulle part.

Avatar Guillaume JOLIN
Re: Exercice 7.18
par Guillaume JOLIN, dimanche 23 mars 2014, 21:00
 

Problème résolut merci !
Mais bon un souci en cache un autre, désormais je n'ai que le dernier mot de mon tableau sValidCommands qui s'affiche
J'en conclu donc que le souci viens de :

public String getCommandList()
{
String vString="";
for(String vCommand : sValidCommands){
vString = " " +vCommand;
}
return vString;

Avatar Denis BUREAU
Re: Exercice 7.18
par Denis BUREAU, lundi 24 mars 2014, 19:46
 

À chaque tour de boucle, vous mettez dans vString la commande suivante du tableau ; il est donc normal qu'après le dernier tour de boucle, vous ayez dans vString la dernière commande du tableau.

À chaque tour de boucle, il faudrait vous débrouiller pour ajouter une nouvelle commande à vString plutôt que de la remplacer par cette nouvelle commande.

Avatar Denis BUREAU
Re: Exercice 7.18
par Denis BUREAU, mercredi 26 février 2020, 09:11
 

Un étudiant a écrit :

... on nous demande de remplacer la procédure showAll() qui affichait les commandes disponibles, par la méthode getCommandList() qui affichera une chaîne de caractère des commandes.
Donc j'ai tenté en m'inspirant de la méthod getExitString() comme indiqué.
.../...

Or, les commandes ne s'affichent plus.
J'ai regardé le forum et je pense qu'il y a un problème dans l'appel des méthodes de classe en classe.
En effet, il faut appeler cette méthode dans la classe Parser:
.../...

J'ai juste remplacé showAll() par la nouvelle méthode.
Puis dans la classe Game, je n'ai rien changé du coup.

Je pense que les modifications faites dans ma classe Parser sont incorrectes.
Pouvez-vous me guide s'il-vous-plaît ...

Avatar Denis BUREAU
Re: Exercice 7.18
par Denis BUREAU, mercredi 26 février 2020, 09:17
 

Votre fonction getCommandList() est parfaite (sauf qu'elle n'a pas à être static ; voir aussi le forum de l'exercice 7.16).

Mais si dans la classe Parser,
vous remplacez une procédure  void proc() { System.out.println( "Hello !" ); }
par une fonction  String fonc() { return "Hello !"; }
en remplaçant juste dans la classe Game l'appel aParser.proc(); par aParser.fonc();
il ne faut pas vous étonner que ça n'affiche plus rien ...

Voyez-vous l'analogie avec votre problème ?
Cela vous permet-il de comprendre ce que vous avez oublié de faire ?